iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
JavaScript

Java程式實作系列 第 27

Java進階語法-4

  • 分享至 

  • xImage
  •  
  1. 併發與多執行緒(Concurrency and Multithreading)

#執行緒(Threads)
執行緒是 Java 中實現多執行緒(Multithreading)和併發程式設計的核心。每個應用程式都至少有一個主執行緒(main thread),但可以創建更多的執行緒來同時執行多個任務。

  • Thread類:繼承 Thread類可以創建新的執行緒。通過覆寫 run()方法來定義執行緒的任務,並使用 start()方法啟動執行緒。
  • Runnable介面:另一種創建執行緒的方法是實作 Runnable介面,並將該實作傳遞給 `
    Thread的構造函數,這樣可以避免直接繼承 Thread類,允許類繼承其他類別。

這兩種方式都能夠讓多個任務並行執行,但由於執行緒是輕量級的系統資源,創建和管理它們必須小心,否則可能會導致性能問題或資源浪費。

#執行緒同步
在多執行緒環境下,不同執行緒可能會同時讀寫共享資料,這會導致資料不一致的問題。為了防止這種情況,Java 提供了多種同步機制:

  • synchronized關鍵字:synchronized用於確保某個區塊或方法在同一時間只被一個執行緒訪問,從而避免多執行緒下的競爭條件(race conditions)。它可以用來鎖定物件或方法,使其他執行緒必須等待。

  • 鎖(Locks):Java 的 java.util.concurrent.locks提供了更靈活的鎖機制,例如 ReentrantLock。與 synchronized不同,鎖提供了更多控制權,例如嘗試獲取鎖、非阻塞的鎖以及可中斷的鎖操作。

  • 執行緒安全的資料結構:Java 提供了一些內建的執行緒安全的資料結構,例如 Vector、Hashtable。但在實際開發中,這些通常會被更高效的併發集合(如 ConcurrentHashMap)取代。

#高階併發工具
Java 的 java.util.concurrent套件提供了一些強大的工具來管理和協調多執行緒的操作:

  • ExecutorService:這是一個框架,用來管理和執行多個執行緒的生命週期。它允許執行緒池(thread pool)的創建,避免頻繁創建與銷毀執行緒,從而提升性能、簡化執行緒的提交、管理和終止。

  • CountDownLatch:這是一種計數器,用來讓一個或多個執行緒等待,直到其他多個執行緒完成工作。計數器初始設定為一個整數值,每當一個執行緒完成任務時,計數器遞減,當計數器歸零時,等待的執行緒才會繼續執行。

  • Semaphore:用來限制同一時間內訪問某資源的執行緒數量。它可以用於實現資源的配額控制,確保某些關鍵資源不會被過度佔用。

  • CyclicBarrier:允許一組執行緒在到達某個同步點後同時繼續執行。當所有執行緒都到達屏障點(barrier),它們才會繼續後續的執行,這對於多執行緒之間的協調有很大幫助。

#併發集合
併發集合是專門為多執行緒環境設計的資料結構,它們能夠高效地處理多執行緒同時訪問的問題,而不需要顯式地使用鎖。

  • ConcurrentHashMap:一種高效的執行緒安全的 Map實現,它使用了一種細粒度鎖(Segmented Lock)來確保多執行緒可以同時讀寫 Map的不同部分,極大地提升了性能。在大多數情況下,它是 HashMap的併發版本,並且性能優於傳統的 Hashtable。

上一篇
Java進階語法-3
下一篇
Java進階語法-5
系列文
Java程式實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言